//package com.cn.config.Interceptor;
//
//import com.alibaba.fastjson2.JSONObject;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.ExpiredJwtException;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.MalformedJwtException;
//import io.jsonwebtoken.security.SignatureException;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.bind.annotation.CrossOrigin;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.*;
//import java.util.Enumeration;
//
//import static com.cn.common.utils.JwtUtils.secretKey;
//@Component
//public class JwtInterceptor implements HandlerInterceptor {
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        String requestURI = request.getRequestURI();
//        // 如果是登录接口，直接放行
//        if ("/guest/login".equals(requestURI)) {
//            return true;
//        } else if ("/login/Purposes".equals(requestURI)) {
//            return true;
//        }
//        Enumeration<String> headerNames = request.getHeaderNames();
//        while (headerNames.hasMoreElements()) {
//            String headerName = headerNames.nextElement();
//            String headerValue = request.getHeader(headerName);
//            System.out.println(headerName + ": " + headerValue);
//        }
//        String token = request.getHeader("Token");
//        System.out.println(token);
//        // 从请求中获取token，这可能涉及到从请求头或参数中获取
//        if (token != null) {
//            Claims claims = validateToken(token);
//            // 如果validateToken返回null或者有异常，发送未授权的响应
//            if (claims != null) {
//                // 验证通过，获取token中的角色信息
//                String role = extractRoleFromToken(token);
//                // 在这里判断用户角色，如果是游客则发送未授权的响应
//                if ("guest".equals(role)) {
//                    sendUnauthorizedResponse(response);
//                    return false; // 不允许访问
//                } else if ("admin".equals(role)) {
//                    return true; // 允许访问
//                }
//            }
//        }
//// 其他情况发送未授权的响应
//        sendUnauthorizedResponse(response);
//        return false;
//    }
//    private Claims validateToken(String token) {
//        try {
//            return Jwts.parser()
//                    .setSigningKey(secretKey)
//                    .parseClaimsJws(token)
//                    .getBody();
//        } catch (ExpiredJwtException ex) {
//            // Token已过期
//            System.err.println("Token已过期: " + ex.getMessage());
//        } catch (SignatureException ex) {
//            // Token签名无效
//            System.err.println("无效的Token签名: " + ex.getMessage());
//        } catch (MalformedJwtException ex) {
//            // Token格式错误
//            System.err.println("无效的Token格式: " + ex.getMessage());
//        } catch (Exception ex) {
//            // 其他异常
//            System.err.println("Token验证失败: " + ex.getMessage());
//        }
//        return null;
//    }
//
//    private String extractRoleFromToken(String token) {
//        // 从token中解析出角色信息
//        Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
//        return claims.get("role", String.class);
//    }
//
//    private void sendUnauthorizedResponse(HttpServletResponse response) throws IOException {
//        // 发送未授权的响应
//        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//        response.setContentType("application/json");
//        PrintWriter writer = response.getWriter();
//        writer.println("{\"error\": \"Unauthorized\"}");
//    }
//}